<!DOCTYPE html>
<html>
<style>
.colContainer { -webkit-column-count: 0; }
.absolutePosition { position: absolute; }
.colSpanAll { -webkit-column-span: all; }
.transformed { transform: rotate(45deg); }
.hidden { display:none; }
.normal { display:block;}
</style>
<script>

window.onload = function() {
    columnContainerBlock = document.createElement('div');
    columnContainerBlock.setAttribute('class', 'colContainer');
    document.documentElement.appendChild(columnContainerBlock);

    splitBlockParent = document.createElement('div');
    splitBlockParent.setAttribute('class', 'transformed');
    columnContainerBlock.appendChild(splitBlockParent);

    splitFlowDt = document.createElement('dt');
    splitBlockParent.appendChild(splitFlowDt);

    positionedDiv = document.createElement('div');
    positionedDiv.setAttribute('class', 'absolutePosition');
    splitBlockParent.appendChild(positionedDiv);

    columnSpan = document.createElement('col');
    columnSpan.setAttribute('class', 'colSpanAll');
    splitFlowDt.appendChild(columnSpan); // Inserting the col inside the dt causes it to get split.
    document.documentElement.offsetHeight;

    splitFlowDt.setAttribute('class', 'hidden'); // This removes the split dt and the col from the render tree.
    document.documentElement.offsetHeight;

    splitFlowDt.setAttribute('class', 'normal'); // Re-adding the dt causes the flow to split again.
    document.documentElement.offsetHeight;

    splitBlockParent.removeChild(positionedDiv); // Remove the positioned object from the tree.
    document.documentElement.offsetHeight;

    splitBlockParent.removeChild(splitFlowDt); // Ensure the node with the bad positioned object list gets layout.

    if (window.testRunner)
        testRunner.dumpAsText();
}
</script>
<body>
PASS if no assert or crash in debug
</body>
</html>
